CC=g++
#CFLAGS = -W -Wall -pedantic -ggdb
CFLAGS = -ggdb
LD=g++
CLEX = flex
CYAC = bison
BIN_TABSYM = compilateur
BIN_CODE3A = compilateur_testExpressions
LIB = -lfl

SRCDIR=Src
TMPDIR=Temporary
OBJDIR=$(TMPDIR)
INCDIR=Inc
RESDIR=Res

#SLEX=$(wildcard $(RESDIR)/*.l)
SLEX_TABSYM=$(RESDIR)/lexer_tabSym.l
SLEX_CODE3A=$(RESDIR)/lexer_code3a.l
SYAC_TABSYM=$(RESDIR)/parser_tabSym.y
SYAC_CODE3A=$(RESDIR)/parser_code3a.y
SRCSC=$(wildcard $(SRCDIR)/*.c)
SRCSCPP=$(wildcard $(SRCDIR)/*.cpp)

OBJS_BASE=$(SRCSCPP:$(SRCDIR)/%.cpp=$(OBJDIR)/%.o) \
	$(SRCSC:$(SRCDIR)/%.c=$(OBJDIR)/%.o) 

OBJS_TABSYM=$(OBJS_BASE) \
	$(SYAC_TABSYM:$(RESDIR)/%.y=$(OBJDIR)/%.o)\
	$(SLEX_TABSYM:$(RESDIR)/%.l=$(OBJDIR)/%.o) 
OBJS_CODE3A=$(OBJS_BASE) \
	$(SYAC_CODE3A:$(RESDIR)/%.y=$(OBJDIR)/%.o)\
	$(SLEX_CODE3A:$(RESDIR)/%.l=$(OBJDIR)/%.o) 

DEPS_TABSYM=$(OBJS_TABSYM:%.o=%.d) 
DEPS_CODE3A=$(OBJS_CODE3A:%.o=%.d) 

all: $(BIN_TABSYM)
expression: $(BIN_CODE3A)

$(BIN_CODE3A): $(OBJS_CODE3A)
	$(LD) -o $@ $^ $(CFLAGS) $(LIB)

$(BIN_TABSYM): $(OBJS_TABSYM)
	$(LD) -o $@ $^ $(CFLAGS) $(LIB)

$(TMPDIR)/%.c: $(RESDIR)/%.l
	$(CLEX) -o $@ $<

$(TMPDIR)/%.c: $(RESDIR)/%.y
	$(CYAC) -d -o $@ $<

$(TMPDIR)/%.h: $(RESDIR)/%.y
	$(CYAC) -d -o $@ $<

$(OBJDIR)/%.o: $(TMPDIR)/%.c
	$(CC) $(CFLAGS) -I$(INCDIR) -o $@ -c $<

$(OBJDIR)/%.o: $(SRCDIR)/%.cpp
	$(CC) $(CFLAGS) -I$(INCDIR) -o $@ -c $<


$(TMPDIR)/%.d: $(SRCDIR)/%.cpp
	$(CC) -I$(INCDIR) -MM -MD -MT $(OBJDIR)/$*.o -o $@ $<
	
$(TMPDIR)/%.d: $(TMPDIR)/%.c
	$(CC) -I$(INCDIR) -MM -MD -MT $(OBJDIR)/$*.o -o $@ $<
-include $(DEPS)

	
.PHONY: info clean distclean veryclean test

clean:
	rm -f $(TMPDIR)/*.d $(TMPDIR)/*.o $(TMPDIR)/*.[ch]

distclean: clean
	rm -f $(BIN)

veryclean: distclean
	find . -type f -name "*~" -exec rm -f {} \;
	clear

re: veryclean 
	make 

test:
	make
	@echo "-------------------------"
	@./compilateur PasTests/Cifre_a_b.pas
